＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

                        PC-FXGAオーサリングソフトウェア
                    『ＧＭＡＫＥＲ』スタータキット(Ver.1.1)
                      ”ＡＧＤファイルフォーマット”の解説

                                        日本電気ホームエレクトロニクス株式会社
                                                        １９９６年　５月３０日

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

目次

第１章  AGD ファイル概要

第２章  AGD ファイルフォーマット

２．１  ファイルヘッダ (File Header)
２．１．１    acfilehdr_t 構造体
２．１．２    modelhdr_t 構造体
２．２  モデルテーブル
２．２．１    modeltbl_t 構造体
２．３  ジオメトリテーブル
２．３．１    fgeomtbl_t 構造体
２．４  ジオメトリデータ・ブロック

第３章  AGD ファイルのバイト整合
３．１  エンディアン
３．２  アライメント

第４章  データタイプ

付録
Ａ．１  actype.h
Ａ．２  acfile.h
Ａ．３  agdfile.h

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

第１章  AGD ファイル概要

AGD ファイルは HuC6273 にて扱う三次元モデルデータのGeometryタイプとそのデータを
定義します。

AGD ファイルはバイナリフォーマットにて提供されており、メモリに読み込み後簡単な
手続きにて FARL で取り扱うことが可能です。

このファイルでは AGDファイル構成の詳細な情報を提供します。

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

第２章  AGD ファイルフォーマット

AGD ファイルは以下の４種類の構造子からなります。

１）File Header         ファイルヘッダ(Model Headerを含む)
２）Model Table         Geometry Tableの集合を管理するデータの配置テーブル
３）Geometry Table      モデルに含まれるジオメトリ(幾何)データの配置テーブル
４）Geometry Data Block 幾何形状データ

これらの記述子を用いて一ファイルに一つのモデルを定義します。

以下の図は、代表的な AGDファイルの構造を示します。

		+------------------+
		|   File Header    |	64 bytes
		+------------------+
		|   Model table1   |	64 * n bytes
		+------------------+
		|   Model table2   |	64 * n bytes
		+------------------+
		| Geometry table1  |	64 * n bytes
                +------------------+
		| Geometry table2  |	64 * n bytes
                +------------------+
		| Geom Data Block1 |	some bytes (64bit aligned)
                +------------------+
		| Geom Data Block2 |	some bytes (64bit aligned)
                +------------------+
                |                  |
			:

■２．１  ファイルヘッダ (File Header)

ファイルヘッダは AGDファイル、AIDファイル、ACDファイルの各データファイルに共通
なヘッダ情報と、それぞれのファイルに固有なデータを含む64bytes の構造体のバイナ
リイメージです。

共通のヘッダ情報はマジックコードやバージョン情報、コメント等で構成され、 AGD固
有の情報はイメージデータの名前やデータタイプ等で構成されます。

構造体の定義を以下に示します。


◆２．１．１  acfilehdr_t 構造体

typedef struct { /* 64 bytes */
/* Aurora common file header structure member  <48 bytes> */
	CARD8	magic_code[4];		/*  0..3 */
	CARD8	version[4];		/*  4..7 */
	CARD8 	tool_name[16];		/*  8..23 */
	CARD8 	comment[16];		/* 24..39 */
	CARD32	file_size;		/* 40..43 */
	CARD32	reserved0;		/* 44..47 */
/* Aurora tools characteristic structure member <16 bytes> */
	CARD8	acparam[16];		/* 48..63 */
} acfilehdr_t;


magiccode     AGDファイルを示す識別子
              <参考> 現在はそれぞれ以下のように定められています。

         AGDファイル == "AGD\0"
         AIDファイル == "AID\0"
         ACDファイル == "ACD\0"

version       AGD ファイルのフォーマット・バージョン
              4バイトの文字列で表し、バージョン情報は２桁10進の数字と１桁のアル
              ファベット、そして \0(NULL)で構成され、各桁はそれぞれリリース番号
              、バージョン、マイナー・バージョンを表し、現在は "20a\0"(2.0a)と
              なります。

tool_name     AGDファイルを作成したツールの名前を定義
              16バイトの文字列で表し、16バイト目には必ず \0(NULL)をおく必要があ
              り、このため tool_nameは最長15文字で構成されます。これに満たない
              場合は、残りを \0(NULL)で埋める必要があります。

comment       AGDファイルを作成した時に付けられたコメント
              16バイトの文字列で表し、で格納します。16バイト目には必ず \0(NULL)
              をおく必要があり、このため commentは最長15文字まで付けることがで
              きます。これに満たない場合は、残りを \0(NULL)で埋める必要がありま
              す。コメントがない場合は、16バイトすべてを \0(NULL)で埋めます。

file_size     ファイルに格納されているデータのサイズ（テーブル類も含む）
              ファイル全体のサイズからファイルヘッダのサイズを減じたものに一致
              します。

acparam        AGD/AID/ACDそれぞれ固有の情報が格納されます。

以上の 6つのメンバは AGD/AID/ACD共通です。


◆２．１．２  modelhdr_t 構造体

  この構造体は、前述のacfilehdr_t構造体のacparam領域に格納され、
acfilehdr_t 構造体の一部分として存在します。この構造体は、ポインターの
サイズが、使用ホストによって異なるため、ファイル上では fmodelhdr_t とし
て定義され、メモリ上では modelhdr_t として定義されます。

ファイル上の構造体
typedef struct { /* 16 bytes */
/* Aurora tools characteristic structure member <16 bytes> */
	CARD16	display_mode;		/* 48..49 */
	CARD16	colormap_type;		/* 50..51 */
	CARD16	colormap_id;		/* 52..53 */
	CARD16	modeltbl_cnt;		/* 54..55 */
	CARD32	modeltbl_addr;		/* 56..59 */
	CARD32	modeltbl_size;		/* 60..63 */
} fmodelhdr_t;

実メモリ上での構造体
typedef struct { 
/* Aurora tools characteristic structure member */
	CARD16	display_mode;
	CARD16	colormap_type;
	CARD16	colormap_id;
	CARD16	modeltbl_cnt;
	void 	*modeltbl_addr;
	CARD32	modeltbl_size;
} modelhdr_t;

display_mode       ディスプレイモードの設定
                   この値の定義は、以下のようになります。

         AC_DISP_MODE_NRM         ノーマルモード
         AC_DISP_MODE_WDM         ワイドモード

colormap_type      カラーマップのタイプの設定
                   この値の定義は、以下のようになります。

         AC_CMAP_TYPE_INDEX9      9ビット・インデックスモード
         AC_CMAP_TYPE_INDEX12     12ビット・インデックスモード
         AC_CMAP_TYPE_I3C6        I=3bit,C=6bit・ICモード
         AC_CMAP_TYPE_I4C5        I=4bit,C=5bit・ICモード
         AC_CMAP_TYPE_I5C4        I=5bit,C=4bit・ICモード
         AC_CMAP_TYPE_I6C3        I=6bit,C=3bit・ICモード
         AC_CMAP_TYPE_I6C6        I=6bit,C=6bit・ICモード

colormap_id        カラーマップIDの設定
                   現在は、デフォルトのカラーマップのみしかサポートしていないた
                   め、IDは必ず 1となります。

         AC_DEFAULT_CMAP_ID       1

modeltbl_cnt      ヘッダーに直接リンクされているイメージテーブルの数
                  モデルテーブルは、階層構造を持っているため、ここに全てのモデ
                  ルテーブル数が入るわけではありません。直接リンクされるモデル
                  テーブルの数は最大 65535個になります。

modeltbl_addr     acfilehdr_t 構造体の直後からのバイト数
                  通常は、この modelhdr_t 構造体の直後を指します。ただし、メモ
                  リ上の構造体として、展開されている時は、実際のアドレスを格納
                  し、modeltbl_t 構造体を指すポインターとなります。

modeltbl_size     ヘッダーに直接リンクされているモデルテーブルのサイズ
                  sizeof(modeltbl_t) * modeltbl_cntに一致します。


■２．２  モデルテーブル

この構造体は、モデルデータを階層的に持つために階層構造のリンクを可能としていま
す。この構造体は、ポインターのサイズが、使用ホストによって異なるため、ファイル
上では fmodeltbl_t として定義され、メモリ上では modeltbl_t として定義されます。


◆２．２．１  fmodeltbl_t 構造体

ファイル上の構造体
typedef struct { /* 64 bytes */
	CARD8	table_type;		/*  0..0  */
	CARD8	model_id;		/*  1..1  */
	CARD16	ngeometries;		/*  2..3  */
	CARD8	modelname[16];		/*  4..19 */
	CARDF32	scale[3];		/* 20..31 */
	CARDF32	bbox[6];		/* 32..55 */
	CARD32	geomtbl_addr;		/* 56..59 */
	CARD32	geomtbl_size;		/* 60..63 */
} fmodeltbl_t;

実メモリ上での構造体
typedef struct {
	CARD8	table_type;
	CARD8	model_id;
	CARD16	ngeometries;
	CARD8	modelname[16];
	CARDF32	scale[3];
	CARDF32	bbox[6];
	void	*geomtbl_addr;
	CARD32	geomtbl_size;
} modeltbl_t;


table_type    構造体タイプの設定
              geomtbl_t 構造体であるか modeltbl_t 構造体であるかのフラグです。
              複数の modeltbl_t 構造体を指すこともでき、モデルの階層構造化が可
              能です。

model_id      モデルデータの管理ID番号
              特に設定の規定はありません。ただし、IDの最大値は、255です。

ngeometries   幾何形状の数を指定
              一つのモデルに含むことができる幾何形状の数は最大 65535個になりま
              す。modeltbl_t 構造体を指す時は、指す modeltbl_t の数が設定されま
              す。

modelname     モデルに付けられた名前
              16バイトで文字列で表し、16バイト目には必ず \0(NULL)をおく必要が
              あり、このため modelnameは最長15文字まで付けることができます。こ
              れに満たない場合は、残りを \0(NULL)で埋める必要があります。model
              nameがない場合は、16バイトすべてを \0 (NULL)で埋めます。

scale         スケーリングの値
              このモデルデータが、オリジナルのデータからどのようなスケーリング
              をされて格納されているかを浮動小数点で格納します。
                   scale[0]            X 座標のスケール
                   scale[1]            Y 座標のスケール
                   scale[2]            Z 座標のスケール
              となります。

bbox          バウンディング・ボックスの値
              このモデルデータのバウンディング・ボックスを浮動小数点で格納しま
              す。
                   bbox[AGD_MAX_X]     X 座標の最大値   /* 0 */
                   bbox[AGD_MAX_Y]     Y 座標の最大値   /* 1 */
                   bbox[AGD_MAX_Z]     Z 座標の最大値   /* 2 */
                   bbox[AGD_MIN_X]     X 座標の最小値   /* 3 */
                   bbox[AGD_MIN_Y]     Y 座標の最小値   /* 4 */
                   bbox[AGD_MIN_Z]     Z 座標の最小値   /* 5 */

              modeltbl_t 構造体を指す時は、それ以下に存在する階層の全てのデータ
              の最大値／最小値が設定されます。

geomtbl_addr  geomtbl_t 構造体もしくは modeltbl_t 構造体の位置
              acfilehdr_t 構造体の直後からのバイト数を表します。ただし、メモリ
              上の構造体として、展開されている時は、実際のアドレスを格納し、geo
              mtbl_t 構造体またはmodeltbl_t 構造体を指すポインターに変換されま
              す。

geomtbl_size  ヘッダーに直接リンクされているgeomtbl_t構造体のサイズ
              sizeof(fgeomtbl_t) * ngeometriesに一致します。ただし、modeltbl_t 
              構造体を指す時は、sizeof(fmodeltbl_t) * ngeometriesに一致します。


■２．３  ジオメトリテーブル

この構造体は、実際のジオメトリデータを指します。

◆２．３．１  modeltbl_t 構造体

typedef struct { /* 64 bytes */
	CARD8	geometry_type;		/*  0..0  */
	CARD8	geometry_id;		/*  1..1  */
	CARD8	texture_tag;		/*  2..2  */
	CARD8	reserved1;		/*  3..3  */
	CARDF32	bbox[6];		/*  4..27 */
	CARD32	data_type;		/* 28..31 */
	CARD32	nelements;		/* 32..35 */
	CARD32	vertices;		/* 36..39 */
	CARD32	vnormals;		/* 40..43 */
	CARD32	fnormals;		/* 44..47 */
	CARD32	vcolor;			/* 48..51 */
	CARD32	fcolor;			/* 52..55 */
	CARD32	gcolor;			/* 56..59 */
	CARD32	vtexi;			/* 60..63 */
} fgeomtbl_t;

typedef struct { 
	CARD8	geometry_type;
	CARD8	geometry_id;
	CARD8	texture_tag;
	CARD8	reserved1;
	CARDF32	bbox[6];
	CARD32	data_type;
	CARD32	nelements;
	void	*vertices;
	void	*vnormals;
	void	*fnormals;
	void	*vcolor;
	void	*fcolor;
	void	*gcolor;
	void	*vtexi;	
} geomtbl_t;

geometry_type ジオメトリデータの形状タイプ
              以下の定義のいずれかが設定されます。

         AGD_GEOM_TRISTRIP        Triangle Strip
         AGD_GEOM_TRILIST         Triangle List
         AGD_GEOM_POLYLINE        Poly Line
         AGD_GEOM_LINELIST        Line List
         AGD_GEOM_PNTLIST         Point List

geometry_id   ジオメトリデータの管理ID番号
              特に設定の規定はありません。ただし、IDの最大値は、255です。

texture_tag   ATTファイルに記述されるテクスチャのID番号
              ID番号には、1 以上の値を設定して下さい。なお、IDの最大値は、255で
              す。

bbox          ジオメトリデータのバウンディング・ボックス
              ジオメトリデータのバウンディング・ボックスを浮動小数点で格納しま
              す。

                   bbox[AGD_MAX_X]     X 座標の最大値   /* 0 */
                   bbox[AGD_MAX_Y]     Y 座標の最大値   /* 1 */
                   bbox[AGD_MAX_Z]     Z 座標の最大値   /* 2 */
                   bbox[AGD_MIN_X]     X 座標の最小値   /* 3 */
                   bbox[AGD_MIN_Y]     Y 座標の最小値   /* 4 */
                   bbox[AGD_MIN_Z]     Z 座標の最小値   /* 5 */

data_type     ジオメトリデータのデータタイプ
              個々のジオメトリデータが、固定小数点で格納されているか、浮動小数
              点で格納されているかを設定します。VERTEX/VNORM/FNORM/UVの各要素に
              ついてFLOAT/FIXのいずれかを設定します。

         AGD_FLOAT_VERTEX    Vertexデータ(頂点座標)が浮動小数点
         AGD_FLOAT_VNORM     Vertex Normalデータ(頂点法線)が浮動小数点
         AGD_FLOAT_FNORM     Facet Normalデータ(面法線)が浮動小数点
         AGD_FLOAT_UV        UVデータ(テキスチャ座標)が浮動小数点
         AGD_FLOAT_ALL       全てのデータが浮動小数点

         AGD_FIX_VERTEX      Vertexデータ(頂点座標)が固定小数点
         AGD_FIX_VNORM       Vertex Normalデータ(頂点法線)が固定小数点
         AGD_FIX_FNORM       Facet Normalデータ(面法線)が固定小数点
         AGD_FIX_UV          UVデータ(テキスチャ座標)が固定小数点
         AGD_FIX_ALL         全てのデータが固定小数点である

nelements     ジオメトリデータが持つエレメントの数（三角形／線／点の数）

vertices      ジオメトリデータの頂点座標データの開始アドレス
              acfilehdr_t 構造体の直後からのバイト数で表します。ただし、メモリ
              上の構造体として、展開されている時は、実際のアドレスを格納し、座
              標データを指すポインターとなります。

vnormals      ジオメトリデータの頂点法線データの開始アドレス
              acfilehdr_t 構造体の直後からのバイト数で表します。ただし、メモリ
              上の構造体として、展開されている時は、実際のアドレスを格納し、頂
              点法線データを指すポインターとなります。使用されない場合は、0 ま
              たは NULLポインターが入ります。

fnormals      ジオメトリデータの面法線データの開始アドレス
              acfilehdr_t 構造体の直後からのバイト数で表します。ただし、メモリ
              上の構造体として、展開されている時は、実際のアドレスを格納し、面
              法線データを指すポインターとなります。使用されない場合は、0 また
              は NULLポインターが入ります。

vcolor        ジオメトリデータの頂点色データの開始アドレス
              acfilehdr_t 構造体の直後からのバイト数で表します。ただし、メモリ
              上の構造体として、展開されている時は、実際のアドレスを格納し、頂
              点色データを指すポインターとなります。使用されない場合は、0 また
              は NULLポインターが入ります。

fcolor        ジオメトリデータの面色データの開始アドレスを acfilehdr_t 構造体の
              直後からのバイト数で表します。ただし、メモリ上の構造体として、展
              開されている時は、実際のアドレスを格納し、面色データを指すポイン
              ターとなります。使用されない場合は、0 または NULLポインターが入り
              ます。

gcolor        ジオメトリデータの全体色データの開始アドレス
              acfilehdr_t 構造体の直後からのバイト数で表します。ただし、メモリ
              上の構造体として、展開されている時は、実際のアドレスを格納し、全
              体色を指すポインターとなります。使用されない場合は、0 または NULL
              ポインターが入ります。

vtexi         ジオメトリデータのUV座標データの開始アドレスを
              acfilehdr_t 構造体の直後からのバイト数で表します。ただし、メモリ
              上の構造体として、展開されている時は、実際のアドレスを格納し、UV
              座標を指すポインターとなります。使用されない場合は、0 または NULL
              ポインターが入ります。


■２．４  ジオメトリデータ・ブロック

ジオメトリデータ・ブロックは各ジオメトリで使用する頂点データや法線データの集ま
ったものです。各データは FARLファンクションなどで使用さる

モデルデータ形式は data_typeに指定されたデータ形式に一致せねばなりません。

各データの開始位置はジオメトリテーブル内の各エントリで指定されたアドレス（acfil
ehdr_tの直後からのバイト数）であり、サイズは各エントリの nelementsで指定された
エレメントと data_typeに依存します。


＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

第３章  AGD ファイルのバイト整合

■３．１  エンディアン

AGD ファイルはリトルインディアンのバイナリ形式で提供されます。
１つのデータの MSB (Most Significant Bit) は最上位バイト目に、LSB (Little Signi
ficant bit)は 0バイト目に現れます。

つまり、32bit のデータ（4byte のデータ）は

    MSB(31bit)                          LSB(0bit)
     +--------+--------+--------+--------+
     |7  ..  0|7  ..  0|7  ..  0|7  ..  0|
     +--------+--------+--------+--------+
          3        2        1        0 (byte)

といった順番に並び、 12345678(Hex)というデータはバイト順に78、56、34、12となり
ます。


■３．２  アライメント

ヘッダ、テーブル、データの開始位置は 64bit alignmentでなくてはなりません。

例えば、あるデータが 6バイト分のデータの場合、続くデータは2バイト分空けて開始し
なくてはいけません。

  悪い例：      addr. +0 +1 +2 +3 +4 +5 +6 +7
                0000  <-- 1st data ---> <----
                0008  --- 2nd data ------> <-
                0010  --- 3rd data ---> <----

  良い例：      addr. +0 +1 +2 +3 +4 +5 +6 +7
                0000  <-- 1st data ---> 00 00
                0008  <-- 2nd data ----------
                0010  -> 00 00 00 00 00 00 00
                0018  <-- 3rd data ------> 00

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

第４章  データタイプ

AGDファイルで使われるデータタイプは、actype.hで規定されています。
データタイプの定義は以下のようになります。

         CARD8           8 bit 符号なし整数
         CARD16         16 bit 符号なし整数
         CARD32         32 bit 符号なし整数
         CARD64         64 bit 符号なし整数 (AGDでは使用しません）
         CARDF32        32 bit IEEE 実数形式

コンパイラの違いなどにより、それぞれの定義が異なりますので注意が必要で
す。

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

付録：Ａ．１  actype.h

/*  static char SccsId[] = "@(#)actype.h	1.2   7/19/95";
 *
 *		Copyright (c) KUBOTA Corporation,
 *		1994, 1995 All Rights Reserved
 *
 *  This software comprises unpublished confidential information of 
 *  KUBOTA Corp. and may not be used, copied or made available to anyone,
 *  except in accordance with the license under which it is furnished.
 */

#ifndef __ACTYPE_H__
#define __ACTYPE_H__

/* Card size define */
#ifdef __VCC__
#define CARDF32 float
#define CARD32 unsigned int
#define CARD16 unsigned short
#define CARD8 unsigned char

#else 
#if (defined(__osf__) && defined(__alpha))
typedef	unsigned long	CARD64;
typedef	unsigned int	CARD32;
typedef	unsigned short	CARD16;
typedef	unsigned char	CARD8;
typedef float 		CARDF32;
#else 
#ifdef __BORLANDC__
typedef	unsigned long	CARD32;
typedef	unsigned short	CARD16;
typedef	unsigned char	CARD8;
typedef float 		CARDF32;
#else
#ifdef __WATCOMC__
typedef	unsigned int	CARD32;
typedef	unsigned short	CARD16;
typedef	unsigned char	CARD8;
typedef float 		CARDF32;
#endif /* __WATCOM__ */
#endif /* __BORLANDC__ */
#endif /* __osf__ */


#ifndef u_char
typedef unsigned char u_char;
#endif
#ifndef u_short
typedef unsigned short u_short;
#endif
#ifndef u_int
typedef unsigned int u_int;
#endif

#endif /* __VCC__ */

#endif /* __ACTYPE_H__ */

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

付録：Ａ．２  acfile.h

/*  static char SccsId[] = "@(#)acfile.h	1.5   7/10/95";
 *
 *		Copyright (c) KUBOTA Corporation,
 *		1994, 1995 All Rights Reserved
 *
 *  This software comprises unpublished confidential information of 
 *  KUBOTA Corp. and may not be used, copied or made available to anyone,
 *  except in accordance with the license under which it is furnished.
 */

#include "actype.h"

#ifndef _AURORA_DATA_FILE_HEADER_
#define	_AURORA_DATA_FILE_HEADER_

/********************************************************
   ALL the DATA Blocks must be aligned on 64 bit.
**********************************************************/

#define AC_ALIGN64(a)	((a%8)?((a/8)+8):(a))  /* 8 byte align */

/*------------------------------------------------------------------*/
#ifndef	NULL
#define	NULL	(0)
#endif

/*------------------------------------------------------------------*/
/* Magic code string <magic_code> */
#define	AGD_MAGIC		"AGD"		/* 'A' 'G' 'D' '\0' */
#define	AID_MAGIC		"AID"		/* 'A' 'I' 'D' '\0' */
#define	ACD_MAGIC		"ACD"		/* 'A' 'C' 'D' '\0' */

/* Version code string <version> */
#define	AC_VERSION_10a		"10a"		/* '1' '0' 'a' '\0' */
#define	AC_VERSION_20a		"20a"		/* '2' '0' 'a' '\0' */

/* Display mode <display_mode> */
#define AC_DISP_MODE_NRM	(0)		/* 256x256 */
#define AC_DISP_MODE_WDM	(1 << 0)	/* 320x200 */

/* Colormap type <colormap_type> */
#define AC_CMAP_TYPE_INDEX9		0
#define AC_CMAP_TYPE_INDEX12		1
#define AC_CMAP_TYPE_I3C6		2
#define AC_CMAP_TYPE_I4C5		3
#define AC_CMAP_TYPE_I5C4		4
#define AC_CMAP_TYPE_I6C3		5
#define AC_CMAP_TYPE_I6C6		6

/* Colormap id <colormap_id> */
#define AC_DEFAULT_CMAP_ID		0

/* Color type definitions */
#define	AC_COLOR_TYPE_INDEX9		0
#define	AC_COLOR_TYPE_INDEX12		1
#define	AC_COLOR_TYPE_INDEX16		2
#define	AC_COLOR_TYPE_INDEX8		3
#define AC_COLOR_TYPE_YUV888		16
#define AC_COLOR_TYPE_YUV844		17
#define AC_COLOR_TYPE_RGB888		32
#define AC_COLOR_TYPE_RGB555		33

/*------------------------------------------------------------------*/
/*	Aurora Common Header File Format			    */
/*------------------------------------------------------------------*/

typedef struct { /* 64 bytes */
/* Aurora common file header structure member  <48 bytes> */
	CARD8	magic_code[4];		/*  0..3 */
	CARD8	version[4];		/*  4..7 */
	CARD8 	tool_name[16];		/*  8..23 */
	CARD8 	comment[16];		/* 24..39 */
	CARD32	file_size;		/* 40..43 */
	CARD32	reserved0;		/* 44..47 */
/* Aurora tools characteristic structure member <16 bytes> */
	CARD8	acparam[16];		/* 48..63 */
} acfilehdr_t;



/*------------------------------------------------------------------*/
/* Aurora Data file Type define			*/
/*                                ++======== reserve	*/
/*				  ||++====== data type	*/
/*                   		  ||||+--+== version #  */
#define	ACFILETYPE_NONE		0x00000000
#define	ACFILETYPE_AGD		0x00010000
#define	ACFILETYPE_AID		0x00020000
#define	ACFILETYPE_ACD		0x00030000
#define	ACFILETYPE_BADFILE	0xffff0000

#define	ACFILETYPE_10a		0x00001001	/* 10(hex)="10",01(hex)="a" */
#define	ACFILETYPE_10b		0x00001002	/* 10(hex)="10",02(hex)="b" */
#define	ACFILETYPE_10c		0x00001003	/*            :             */
#define	ACFILETYPE_20a		0x00002001	/* 20(hex)="20",01(hex)="a" */
#define	ACFILETYPE_20b		0x00002002	/* 20(hex)="20",02(hex)="b" */
#define	ACFILETYPE_20c		0x00002003	/*            :             */
#define	ACFILETYPE_BADVERSION	0xff00ffff

#define	ACFILETYPE_ILLEGAL	0xffffffff	/* was -1 */
#define	ACFILETYPE_ERROR	0xfffffffe	/* was -2 */

#define	ACFILETYPE_CTRLMASK	0xff000000
#define	ACFILETYPE_TYPEMASK	0x00ff0000
#define	ACFILETYPE_VERSIONMASK	0x0000ffff

typedef	CARD32	acfiletype_t;			/* signed 32bit integer */

#endif	/* _AURORA_DATA_FILE_HEADER_ */

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

付録：Ａ．３  agdfile.h

/*  static char SccsId[] = "@(#)agdfile.h	1.6   7/19/95";
 *
 *		Copyright (c) KUBOTA Corporation,
 *		1994, 1995 All Rights Reserved
 *
 *  This software comprises unpublished confidential information of 
 *  KUBOTA Corp. and may not be used, copied or made available to anyone,
 *  except in accordance with the license under which it is furnished.
 */

#ifndef _AGD_FILE_HEADER__
#define	_AGD_FILE_HEADER__

#if (defined(__osf__) && defined(__alpha))
#include	<values.h>
#else
#define MAXFLOAT      ((float)3.402e+38)
#endif

#include	"acfile.h"		/* Aurora Data file header */

/********************************************************************/

/* Table Type definitions <table_type> */
#define	AGD_TBLTYPE_GEOMTBL	0
#define	AGD_TBLTYPE_MODELTBL	1

/* Data Type definitions <data_type> */
#define AGD_SFT_FLOAT_VERTEX		0
#define AGD_SFT_FLOAT_VNORM		1
#define AGD_SFT_FLOAT_FNORM		2
#define AGD_SFT_FLOAT_UV		7

#define AGD_SFT_FIX_VERTEX		16
#define AGD_SFT_FIX_VNORM		17
#define AGD_SFT_FIX_FNORM		18
#define AGD_SFT_FIX_UV			23

#define AGD_FLOAT_VERTEX	(1<<AGD_SFT_FLOAT_VERTEX)
#define AGD_FLOAT_VNORM		(1<<AGD_SFT_FLOAT_VNORM)
#define AGD_FLOAT_FNORM		(1<<AGD_SFT_FLOAT_FNORM)
#define AGD_FLOAT_UV		(1<<AGD_SFT_FLOAT_UV)

#define AGD_FLOAT_ALL		( AGD_FLOAT_VERTEX | \
					AGD_FLOAT_VNORM | \
					AGD_FLOAT_FNORM |\
					AGD_FLOAT_UV )

#define AGD_FIX_VERTEX		(1<<AGD_SFT_FIX_VERTEX)
#define AGD_FIX_VNORM		(1<<AGD_SFT_FIX_VNORM)
#define AGD_FIX_FNORM		(1<<AGD_SFT_FIX_FNORM)
#define AGD_FIX_UV		(1<<AGD_SFT_FIX_UV)

#define AGD_FIX_ALL		( AGD_FIX_VERTEX |\
				        AGD_FIX_VNORM | \
					AGD_FIX_FNORM | \
					AGD_FIX_UV )

/**********************************************************
#define AGD_FIX_FORMAT_VERTEX		FIXTYPE(1, 0, 15)
#define AGD_FIX_FORMAT_VNORM		FIXTYPE(1, 0, 15)
#define AGD_FIX_FORMAT_FNORM		FIXTYPE(1, 0, 15)
#define AGD_FIX_FORMAT_ECOLOR		FIXTYPE(0, 9, 0)
#define AGD_FIX_FORMAT_GCOLOR		FIXTYPE(0, 9, 0)
#define AGD_FIX_FORMAT_VTEXI		FIXTYPE(0, 8, 0)
#define AGD_FIX_FORMAT_OBJECT_MATRIX	FIXTYPE(1, 8, 7)
#define AGD_FIX_FORMAT_NORMAL_MATRIX	FIXTYPE(1, 0, 15)
#define AGD_FIX_FORMAT_LIGHT		FIXTYPE(1, 0, 15)
#define AGD_FIX_FORMAT_AMBIENT		FIXTYPE(0, 0, 15)
#define AGD_FIX_FORMAT_DIFFUSE		FIXTYPE(0, 0, 15)
#define AGD_FIX_FORMAT_SPECULAR		FIXTYPE(0, 0, 15)
#define AGD_FIX_FORMAT_EYEVECT		FIXTYPE(1, 0, 15)
**********************************************************/

/* Geometry Type definitions <geometry_type> */
#define	AGD_GEOM_TRISTRIP	1
#define	AGD_GEOM_TRILIST	2
#define	AGD_GEOM_POLYLINE	3
#define	AGD_GEOM_LINELIST	4
#define	AGD_GEOM_PNTLIST	5

/* Bounding box definitions <bbox> */
#define AGD_MAX_X		0
#define AGD_MAX_Y		1
#define AGD_MAX_Z		2
#define AGD_MIN_X		3
#define AGD_MIN_Y		4
#define AGD_MIN_Z		5
#define AGD_MAX_FLOAT_PLUS	MAXFLOAT
#define AGD_MAX_FLOAT_MINUS	(-MAXFLOAT)

#ifndef max
#define max(a,b)  ( ((a) > (b)) ? (a) : (b) )
#endif
#ifndef min
#define min(a,b)  ( ((a) < (b)) ? (a) : (b) )
#endif

/*******************
  for file image
 *******************/

/********************************************************************/
/* define type of file image structure */

typedef struct { /* 16 bytes */
/* Aurora tools characteristic structure member <16 bytes> */
	CARD16	display_mode;		/* 48..49 */
	CARD16	colormap_type;		/* 50..51 */
	CARD16	colormap_id;		/* 52..53 */
	CARD16	modeltbl_cnt;		/* 54..55 */
	CARD32	modeltbl_addr;		/* 56..59 */
	CARD32	modeltbl_size;		/* 60..63 */
} fmodelhdr_t;

typedef struct { /* 64 bytes */
	CARD8	table_type;		/*  0..0  */
	CARD8	model_id;		/*  1..1  */
	CARD16	ngeometries;		/*  2..3  */
	CARD8	modelname[16];		/*  4..19 */
	CARDF32	scale[3];		/* 20..31 */
	CARDF32	bbox[6];
	CARD32	geomtbl_addr;		/* 32..35 */
	CARD32	geomtbl_size;		/* 36..39 */
} fmodeltbl_t;

typedef struct { /* 64 bytes */
	CARD8	geometry_type;		/*  0..0  */
	CARD8	geometry_id;		/*  1..1  */
	CARD8	texture_tag;		/*  2..2  */
	CARD8	reserved1;		/*  3..3  */
	CARDF32	bbox[6];		/*  4..27 */
	CARD32	data_type;		/* 28..31 */
	CARD32	nelements;		/* 32..35 */
	CARD32	vertices;		/* 36..39 */
	CARD32	vnormals;		/* 40..43 */
	CARD32	fnormals;		/* 44..47 */
	CARD32	vcolor;			/* 48..51 */
	CARD32	fcolor;			/* 52..55 */
	CARD32	gcolor;			/* 56..59 */
	CARD32	vtexi;			/* 60..63 */
} fgeomtbl_t;

/********************************************************************/

/* define type of memory image structure */

typedef struct { 
/* Aurora tools characteristic structure member */
	CARD16	display_mode;
	CARD16	colormap_type;
	CARD16	colormap_id;
	CARD16	modeltbl_cnt;
	void 	*modeltbl_addr;
	CARD32	modeltbl_size;
} modelhdr_t;

typedef struct {
	CARD8	table_type;
	CARD8	model_id;
	CARD16	ngeometries;
	CARD8	modelname[16];
	CARDF32	scale[3];
	CARDF32	bbox[6];
	void	*geomtbl_addr;
	CARD32	geomtbl_size;
} modeltbl_t;

typedef struct { 
	CARD8	geometry_type;
	CARD8	geometry_id;
	CARD8	texture_tag;
	CARD8	reserved1;
	CARDF32	bbox[6];
	CARD32	data_type;
	CARD32	nelements;
	void	*vertices;
	void	*vnormals;
	void	*fnormals;
	void	*vcolor;
	void	*fcolor;
	void	*gcolor;
	void	*vtexi;	
} geomtbl_t;

#endif	/* _AGD_FILE_HEADER__ */

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

                                                           (C)1995 HUDSON SOFT
                                                           (C)1995 KUBOTA CORP.

